import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

public class SistemaEmprestimo {
	private HashMap<String, Usuario> usuarios;
	private HashMap<String, Documento> documentos;

	public SistemaEmprestimo() {
		usuarios = new HashMap<String, Usuario>();
		documentos = new HashMap<String, Documento>();
	}

	public Collection<Usuario> getUsuarios() {
		return this.usuarios.values();
	}

	public Collection<Documento> getDocumentos() {
		return this.documentos.values();
	}

	public Usuario getUsuario(String nome) {
		List<Usuario> usuarios = (List<Usuario>) getUsuarios();
		for (int i = 0; i < usuarios.size(); i++) {
			if (nome.toLowerCase().startsWith(
					usuarios.get(i).getNome().toLowerCase())) {
				return usuarios.get(i);
			}
		}
		return null;
	}
	
	public Usuario getUsuarioId(String id){
		return usuarios.get(id);
	}

	public boolean addUsuario(Usuario usuario) {
		if(!usuarios.containsKey(usuario.getId())){
			usuarios.put(usuario.getId(), usuario);
			return true;
		}
		return false;
	}

	public boolean addDocumentos(Documento documento) {
		if(!documentos.containsKey(documento.getId())){
			documentos.put(documento.getId(), documento);
			return true;
		}
		return false;
	}

	public boolean efetuarEmprestimo(Usuario usuario, Documento documento) {
		if (documentos.containsKey(documento.getId()) && !documento.isEmprestado()) {
			usuario.pegarDocumento(documento);
			return true;
		}
		return false;
	}

	public boolean efetuarDevolucao(Usuario usuario, Documento documento) {
		if (documentos.containsKey(documento.getId())
				&& usuario.estaComDocumento(documento)) {
			usuario.devolverDocumento(documento);
			documento.devolver();
			return true;
		}
		return false;
	}

	public Documento getDocumento(String nome) {
		ArrayList<Documento> documentos = (ArrayList<Documento>) getDocumentos();
		for (int i = 0; i < documentos.size(); i++) {
			if (nome.toLowerCase().startsWith(
					documentos.get(i).getTitulo().toLowerCase())) {
				return documentos.get(i);
			}
		}
		return null;
	}
	
	public Documento getDocumentoId(String id) {
		return documentos.get(id);
	}

	public boolean excluiDocumento(Documento documento) {
		if (documentos.containsKey(documento.getId()) && !documento.isEmprestado()) {
			documentos.remove(documento);
			return true;
		}
		return false;
	}

	public boolean excluiUsuario(Usuario usuario) {
		if (usuarios.containsKey(usuario.getId()) && !usuario.temDocumentos()) {
			usuarios.remove(usuario);
			return true;
		}
		return false;
	}

}
